#include <iostream>

class Car  //抽象产品
{
public:
    virtual void show() = 0;
};

class BMW : public Car  //具体产品
{
public:
    BMW(int a){}
    void show()
    {
        std::cout << "一辆宝马" << std::endl;
    }
};


class Benz : public Car
{
public:
    Benz(double b){}
    void show()
    {
        std::cout << "一辆奔驰" << std::endl;
    }
};

class Audi : public Car
{
public:
    Audi(char c){}
    void show()
    {
        std::cout << "一辆奥迪" << std::endl;
    }
};

class Factory  //抽象工厂
{
public:
    virtual Car *Create() = 0;
};

class BMWFactory : public Factory  //具体工厂
{
public:
    Car *Create()
    {
        return new BMW(1);
    }
};

class BenzFactory : public Factory
{
public:
    Car *Create()
    {
        return new Benz(3.143);
    }
};


int main()
{
    Factory *f = new BMWFactory;
    Car *c = f->Create();
    c->show();
    return 0;
}